package com.easipass.framework.eirframeworkcoredsl;

import org.springframework.util.Assert;

public class DestinationNode extends AstNode {

    private final String destinationName;

    private final ArgumentNode[] arguments;

    public DestinationNode(int startPos, int endPos, String destinationName, ArgumentNode[] arguments) {
        super(startPos, endPos);
        Assert.notNull(destinationName, "'destinationName' must not be null");
        this.arguments = arguments;
        this.destinationName = destinationName;
    }

    @Override
    public String stringify(boolean includePositionalInfo) {
        StringBuilder s = new StringBuilder();
        s.append("(");
        s.append(getDestinationName());
        if (includePositionalInfo) {
            s.append(":");
            s.append(getStartPos()).append(">").append(getEndPos());
        }
        if (arguments != null) {
            for (ArgumentNode argumentNode : arguments) {
                s.append(" --").append(argumentNode.getName()).append("=").append(argumentNode.getValue());
            }
        }
        s.append(")");
        return s.toString();
    }

    @Override
    public void accept(Visitor visitor) {

    }

    @Override
    public String toString() {
        return ":" + getDestinationName();
    }

    String getDestinationName() {
        return this.destinationName;
    }

    public DestinationNode copyOf() {
        return new DestinationNode(super.startPos, super.endPos, destinationName, arguments);
    }

    ArgumentNode[] getArguments() {
        return this.arguments;
    }

}
